home *** CD-ROM | disk | FTP | other *** search
/ Turnbull China Bikeride / Turnbull China Bikeride - Disc 2.iso / ACORNUSERS / EMULATOR / BABE / !Babe / WimpLib (.txt) < prev   
RISC OS BBC BASIC V Source  |  1995-05-12  |  13KB  |  454 lines

  1.  Wimp Library 
  2.  David Sharp 1997
  3.  Windows
  4.  Icons
  5.  Menus
  6.  Files
  7.  Messages
  8.  Misc
  9.  Errors
  10.  ****************************** Window Handling Routines *******************
  11.  Bring a window to the front of the screen
  12. Wimp_WindowToTop(window%)
  13.   wimp%!0=window%
  14.  "Wimp_GetWindowState",,wimp%
  15.   wimp%!28=-1
  16.  "Wimp_OpenWindow",,wimp%
  17.  Close a window
  18. Wimp_WindowClose(window%)
  19.   !wimp%=window%
  20.  "Wimp_CloseWindow",,wimp%
  21.  Open the notify window, trap mouse and make beep
  22. Wimp_Notify(message$)
  23.  "Wimp_SetCaretPosition",-1 :
  24.  remove caret
  25. Wimp_IconPutText(notify_Window%,3,message$)
  26.  1   
  27. Wimp_OpenWindowMiddle(notify_Window%,0,0)
  28. !>   
  29.  wimp%!4,wimp%!8,wimp%!12-wimp%!4,wimp%!16-wimp%!8
  30.  beep
  31. #*   
  32. Wimp_IconCaret(notify_Window%,8,0)
  33.  Open a window in the middle of the screen
  34. Wimp_OpenWindowMiddle(window%,ofstX%,ofstY%)
  35.  x%,y%,w%,h%
  36.    x%=(
  37. os_x/2)+ofstX%
  38. *G   y%=(
  39. os_y/2)+ofstY%             :
  40.  y = middle of screen plus any
  41. +@   !wimp%=window%                   :
  42.  get info about window
  43. ,&   
  44.  "Wimp_GetWindowState",,wimp%
  45. -9   w%=(wimp%!12-wimp%!4)/2          :
  46.  window width/2
  47. .:   h%=(wimp%!16-wimp%!8)/2          :
  48.  window height/2
  49.    wimp%!4 =x%-w%
  50.    wimp%!8 =y%-h%
  51.    wimp%!12=x%+w%
  52.    wimp%!16=y%+h%
  53. 3A   wimp%!28=-1                  :
  54.  ensure top of window stack
  55. 4"   
  56.  "Wimp_OpenWindow",,wimp%
  57. Wimp_WindowAlertBox(title$,message$,button%)
  58.  response%
  59.    $(wimp%+4)=message$
  60.  button% 
  61.       
  62.  2    : response%=1
  63.       
  64.  1    : response%=15
  65. =&      
  66.  3    : response%=(1<<5)+16
  67. >&      
  68.  4    : response%=(1<<6)+16
  69.       
  70.  : response%=16
  71. A@   
  72.  "Wimp_ReportError",wimp%,response%,title$ 
  73.  ,response%
  74. Wimp_WindowAlert(title$,message$)
  75. E.   
  76. Wimp_WindowAlertBox(title$,message$,0)
  77. Wimp_LoadWindow(buf%,
  78.  I%,IE%,F%,W$)
  79. J8   
  80. "Wimp_LoadTemplate",,buf%,I%,IE%,F%,W$,0 
  81.  ,,I%
  82. K(   
  83. "Wimp_CreateWindow",,buf% 
  84.  ************************ Icon Handling Routines *************************
  85.  return TRUE/FALSE is icon is selected/unselected
  86. Wimp_IconSelected(window%,icon%)
  87.    wimp%!0=window%
  88.    wimp%!4=icon%
  89. X$   
  90.  "Wimp_GetIconState",,wimp%
  91. =(wimp%!24 >> 21) 
  92.  set an icon to be selected
  93. Wimp_SelectIcon(window%,icon%)
  94.    wimp%!0=window%
  95.    wimp%!4=icon%
  96. _&   wimp%!8=%1000000000000000000000
  97. `'   wimp%!12=%1000000000000000000000
  98. a$   
  99.  "Wimp_SetIconState",,wimp%
  100.  set an icon to be NOT selected
  101. Wimp_UnselectIcon(window%,icon%)
  102.    wimp%!0=window%
  103.    wimp%!4=icon%
  104.    wimp%!8=%0
  105. i'   wimp%!12=%1000000000000000000000
  106. j$   
  107.  "Wimp_SetIconState",,wimp%
  108.  Create icon on the icon bar
  109. Wimp_CreateIconBar(sprite$,side%)
  110. pB   wimp%!0=side%                  :
  111.  -1 for right, -2 for left
  112. q:   wimp%!4=0                      :
  113.  min x co-ordinate
  114. r:   wimp%!8=0                      :
  115.  min y co-ordinate
  116. s:   wimp%!12=68                    :
  117.  max x co-ordinate
  118. t:   wimp%!16=68                    :
  119.  max y co-ordinate
  120. uB   wimp%!20=12290                 :
  121.  icon flags (sprite+click)
  122. v4   $(wimp%+24)=sprite$            :
  123.  sprite name
  124. w(   
  125.  "Wimp_CreateIcon",,wimp% 
  126.  'grey out' an icon
  127. Wimp_IconDisable(window%,icon%)
  128.    wimp%!0=window%
  129.    wimp%!4=icon%
  130.    wimp%!8=1<<22
  131.    wimp%!12=1<<22
  132.  "Wimp_SetIconState",,wimp%
  133.  re-enable and reverse 'grey out' of an icon
  134. Wimp_IconEnable(window%,icon%)
  135.    wimp%!0=window%
  136.    wimp%!4=icon%
  137.    wimp%!8=0
  138.    wimp%!12=1<<22
  139.  "Wimp_SetIconState",,wimp%
  140. Wimp_IconGetText(window%,icon%)
  141.   wimp%!0=window%
  142.   wimp%!4=icon%
  143.  "Wimp_GetIconState",,wimp%
  144. =$(wimp%!28)
  145. Wimp_IconPutText(window%,icon%,text$)
  146.   wimp%!0=window%
  147.   wimp%!4=icon%
  148.  "Wimp_GetIconState",,wimp%
  149.   $(wimp%!28)=text$
  150.   wimp%!8=0
  151.   wimp%!12=0
  152.  "Wimp_SetIconState",,wimp%
  153. Wimp_IconPutSprite(window%,icon%,sprite$)           
  154. @   wimp%!0=window%                                          
  155. @   wimp%!4=icon%                                            
  156.  "Wimp_GetIconState",,wimp%
  157.    $(wimp%!28)=sprite$+
  158. N   wimp%!32=1                                          :
  159.  Wimp sprite pool
  160.    wimp%!36=
  161. sprite$
  162.  $(wimp%!32)="S"+sprite$                       :REM ######## Removed
  163.    wimp%!8 =0
  164.    wimp%!12=0
  165.  "Wimp_SetIconState",,wimp%
  166. Wimp_IconCaret(window%,icon%,chars%)
  167.  "Wimp_SetCaretPosition",window%,icon%,,,-1,chars%
  168. Wimp_SetBarWidth(D%,E%,F%)
  169.  D% = window%, E% = icon%, F% = width%
  170.  setbarwidth%
  171. 6       
  172. icon(!block%,text$,L%,B%,W%,H%,block%!20)
  173. ;block%!4=L%:block%!8=B%:block%!12=L%+W%:block%!16=B%+H%
  174.  text$<>"" $(block%+24)=text$
  175. 262338,,block% 
  176. ind_icon(window%,
  177.  buff%,block%!28,len%,text$,L%,B%,W%,H%,F%)
  178.  buff% len%
  179. $buff%=text$
  180. block%!24=buff%
  181. block%!32=len%+1
  182. icon(window%,"",L%,B%,W%,H%,F%
  183. &100)
  184.  Create icon in window
  185. Wimp_CreateIcon(window%,text$,valid$,x%,y%,width%,height%,tl%,flags%)
  186.  validation%,text_block%
  187.  tl%<
  188. (text$) 
  189.  tl%=
  190. (text$)     :
  191.  ensure length sl%>=text$
  192.  text_block% tl%                       :
  193.  claim memory for text
  194.  valid$<>"" 
  195.  validation% 
  196. (valid$)+2
  197.  claim mem for validation
  198. N   wimp%!0=window%                           :
  199.  select window to create in
  200. P   wimp%!4=x%                                :
  201.  set pos of left side of icon
  202. R   wimp%!8=y%-height%                        :
  203.  set pos of bottom side of icon
  204. Q   wimp%!12=width%                           :
  205.  set pos of right side of icon
  206. O   wimp%!16=y%                               :
  207.  set pos of top side of icon
  208. F   $text_block%=text$                        :
  209.  put text in memory
  210. B   wimp%!20=flags%                           :
  211.  set icon flags
  212. L   wimp%!24=text_block%                      :
  213.  set pointer to text area
  214.  valid$="" 
  215.  wimp%!28=-1 
  216.  wimp%!28=validation%
  217.  set pointer to validation or -1 if none
  218. K   wimp%!32=tl%                              :
  219.  set length of text area
  220.  "Wimp_CreateIcon",,wimp% 
  221.  icon%
  222. =icon%
  223. Wimp_DeleteIcon(window%,icon%)
  224.  minx%,miny%,maxx%,maxy%
  225. <   wimp%!0=window%                  :
  226.  set window handle
  227. :   wimp%!4=icon%                    :
  228.  set icon handle
  229.  "Wimp_GetIconState",,wimp%   :
  230.  get icon dimensions
  231. @   minx%=wimp%!8                    :
  232.  store icon dimensions
  233.    miny%=wimp%!12
  234.    maxx%=wimp%!16
  235.    maxy%=wimp%!20
  236.  "Wimp_DeleteIcon",,wimp%     :
  237.  delete icon
  238.  "Wimp_ForceRedraw",window%,minx%,miny%,maxx%,maxy%
  239.  redraw area of icon to remove icon image from window   
  240.  ****************************** Menu Handling Routines *********************
  241. Wimp_OpenMenu(Menu%,x%,y%)
  242.    menu%=Menu%
  243.  "Wimp_CreateMenu",,menu%,x%,y%
  244. Wimp_MenuClose
  245.  "Wimp_CreateMenu",-1
  246. SaveMenuData
  247.    B=
  248. ("Mem:$.menudata")
  249.  "OS_GBPB",2,B,bar_Menu%,28+(3*24)
  250.  "OS_GBPB",2,B,save_Menu%,28+(2*24)
  251.  "OS_GBPB",2,B,main_Menu%,28+(6*24)
  252. Wimp_MenuTick(menu%,item%)
  253. :   menu%!(28+(item%-1)*24)=(menu%!(28+(item%-1)*24))
  254. Wimp_MenuStart(title$,name%,width%)
  255.    menu%=name%
  256. /   $(menu%)=title$+
  257. (0)   :
  258.  title for menu
  259. C   menu%!12=7                :
  260.  title foreground & frame colour
  261. ;   menu%!13=2                :
  262.  title background colour
  263. :   menu%!14=7                :
  264.  menu foreground colour
  265. :   menu%!15=0                :
  266.  menu background colour
  267. 2   menu%!16=width%           :
  268.  width (pixels)
  269. @   menu%!20=44               :
  270.  height of each item (pixels)
  271. G   menu%!24=0                :
  272.  vertical gap between items (pixels)
  273.    menu%+=28
  274.                                                      
  275. Wimp_MenuAddString(item$,submenu%)
  276. =   menu%!0=0                 :
  277.  flags (see page 1226 PRM)
  278.     3   menu%!4=submenu%          :
  279.  submenu pointer
  280. A   menu%!8=&7000031          :
  281.  iconflags (see page 1181 PRM)
  282. >   $(menu%+12)=item$+
  283. (0) :
  284.  icon data (see page 1183 PRM)
  285.    menu%+=24
  286. Wimp_MenuAddLong(item%,submenu%)
  287. '   menu%!0=0               :
  288.  flags
  289. 5   menu%!4=submenu%        :
  290.  any submenu present
  291. ,   menu%!8=&7000121        :
  292.  icon flags
  293. &   menu%!12=item%          :
  294.  text
  295. ,   menu%!16=0              :
  296.  validation
  297. 7   menu%!20=
  298. ($item%)             :
  299.  length of text
  300.    menu%+=24
  301. Wimp_MenuEnd
  302. $   menu%!(-24)=menu%!(-24) 
  303. Wimp_MenuDisable(menu%,item%)
  304. >   menu%!(36+(item%-1)*24)=menu%!(36+(item%-1)*24)
  305. (1<<22)
  306. Wimp_MenuEnable(menu%,item%)
  307. "%   
  308. Wimp_MenuDisable(menu%,item%)
  309. #>   menu%!(36+(item%-1)*24)=menu%!(36+(item%-1)*24)
  310. (1<<22)
  311. Wimp_MenuDottedLine(menu%,item%)
  312. ':   menu%!(28+(item%-1)*24)=(menu%!(28+(item%-1)*24))
  313. Menu_ItemNumber(stage%)
  314. =(wimp%!(4*stage%))+1
  315.  ****************************** File Handling ******************************
  316. GiveFileType(type%)
  317. ~(type%)
  318. GetLeafName(file$)
  319.     a%=
  320. file$,".")
  321.     file$=
  322. file$,a%+1)
  323.  a%=0
  324. =file$
  325. Wimp_FileSize(file$)
  326. :.   
  327.  "OS_File",13,file$ 
  328.  ,,,,filelength%
  329. =filelength%
  330. Wimp_LoadFileToMemory(file$,address%)
  331. >'   
  332.  "OS_File",12,file$,address%,0
  333.  ****************************** Messages *****************************
  334. Wimp_GetMessage(token$)   
  335. (token$)>tokensize% 
  336. E2      
  337. Wimp_Notify(
  338. Wimp_GetMessage("DBG001"))
  339. G%      $messages_token%=token$+":"
  340.       H%=filesize%
  341.       
  342.  findmessage%
  343. =$message%
  344. Wimp_LoadMessages(file$)
  345. N&   filesize%=
  346. Wimp_FileSize(file$)
  347. OF   
  348.  messages_buff% filesize%     :
  349.  define area for messages file
  350. P3   
  351. Wimp_LoadFileToMemory(file$,messages_buff%)
  352.  ****************************** Misc **********************************
  353. Wimp_GetScreenVariables
  354.   !wimp%=4
  355.   wimp%!4=5
  356.   wimp%!8=11
  357.   wimp%!12=12
  358.   wimp%!16=-1
  359.  "OS_ReadVduVariables",wimp%,wimp%
  360. \,  screenwidth%=(wimp%!8+1)*(1<<(!wimp%))
  361. ]/  screenheight%=(wimp%!12+1)*(1<<(wimp%!4))
  362. ^   xeig%=wimp%!28+1<<wimp%!20
  363. _   yeig%=wimp%!32+1<<wimp%!24
  364.  xpix%,xeigfactor%
  365. d/   
  366.  "OS_ReadModeVariable",-1,11 
  367.  ,,xpix%
  368. e4   
  369.  "OS_ReadModeVariable",-1,4 
  370.  ,,xeigfactor%
  371. =(xpix%+1)<<xeigfactor%
  372.  ypix%,yeigfactor%
  373. j/   
  374.  "OS_ReadModeVariable",-1,12 
  375.  ,,ypix%
  376. k4   
  377.  "OS_ReadModeVariable",-1,5 
  378.  ,,yeigfactor%
  379. =(ypix%+1)<<yeigfactor%
  380. GetString(str%)
  381.  ?str%>31
  382.     a$+=
  383. (?str%)
  384.     str%+=1
  385. Wimp_GetStringAtAddress(array%)
  386.    s$=""
  387. y&   
  388.  (?array%<>13) 
  389.  (?array%<>0)
  390.       s$+=
  391. (?array%)
  392.       array%+=1
  393. EvalSYSVariable(Var$)
  394.  "OS_EvaluateExpression",Var$,ret%,100 
  395.  ,t%,l%
  396.    ret%?l%=13
  397. =$ret%
  398. FileExists(file$)
  399.  "OS_File",13,file$ 
  400.  found%
  401. =found%
  402. SpriteExists(sprite$)
  403.  "Wimp_BaseOfSprites" 
  404.  ,ramsprites%
  405.  "Wimp_SpriteOp",40,ramsprites%,sprite$ 
  406.  ,,,found%
  407. =found%
  408. Wimp_IconBarMenuPos(Menu%,IconBar_Icon%,
  409.  menu_x_pos%,
  410.  menu_y_pos%)
  411.  x%,wx%,MenuSpacing%,MenuEntries%,Dividers%,MenuWidth%,I%,L%,T$
  412. MenuEntries%=1
  413. Dividers%   =0
  414. MenuSpacing%=Menu%!20
  415. I%=Menu%+28
  416.  ((?I%>>7)
  417. MenuEntries%+=1
  418.  ((?I%>>1)
  419. 1)=1 
  420.  Dividers%+=1
  421.  ((I%?9)
  422. 1)=1 
  423. GetString(I%!12) 
  424. GetString(I%+12)
  425.  L%>MenuWidth% MenuWidth%=L%
  426. I%+=24
  427. MenuWidth%+=1
  428.  First get the x origin of the icon bar window
  429. wimp%!0=-2
  430.  "Wimp_GetWindowState",,wimp%
  431. Cwx%=wimp%!4+wimp%!20     :
  432.  wx%=min x origin of icon bar window
  433. wimp%!0=-2
  434. wimp%!4=IconBar_Icon%
  435.  "Wimp_GetIconState",,wimp%
  436. x%=wimp%!8-wx%
  437. )menu_x_pos%=x%+34-(MenuWidth%
  438. 2*16+8)
  439. =menu_y_pos%=96+(Dividers%*24)+(MenuEntries%*MenuSpacing%)
  440.  -------------------------------------------------------------------
  441.  Procedure to remove all fonts loaded with the templates provided
  442.  they have been defined and used.
  443.  -------------------------------------------------------------------
  444. lose_fonts(fonts%)
  445.  use%,font%
  446.  font%=0 
  447.  (fonts%?font%)>0 
  448.  use%=1 
  449.  fonts%?font%
  450. !    
  451.  "XFont_LoseFont",font%
  452.  ************************ Error handling routines **************************
  453.  these are the error handling routines once the LIBRARY has been initialised
  454.